package com.ruoyi.common.utils.paging;

import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.PageInfo;

import java.util.ArrayList;
import java.util.List;

/**
 * PagingUtils
 *
 * @author HHKJ-SERVER-ZJ
 * @since 2023/10/26 22:27
 */
public class PageInfoUtils {

    /**
     * 转为PageInfo
     *
     * @param pageInfoPo 分页信息
     * @param resClass   返回结果类
     * @param <Res>      结果集
     * @param <Po>       返回数据
     * @return 分页信息
     */
    public static <Res, Po> PageInfo<Res> toPageInfoRes(PageInfo<Po> pageInfoPo, Class<Res> resClass) {
        List<Res> recordResList = BeanUtil.copyToList(pageInfoPo.getList(), resClass);
        PageInfo<Res> pageInfoRes = new PageInfo<>();
        BeanUtil.copyProperties(pageInfoPo, pageInfoRes);
        pageInfoRes.setList(recordResList);
        return pageInfoRes;
    }

    /**
     * 创建空的分页结果集
     *
     * @param resClazz 类型
     * @param <Res>    结果集
     * @return 分页信息
     */
    public static <Res> PageInfo<Res> emptyPage(Class<Res> resClazz) {
        return new PageInfo<>(new ArrayList<Res>());
    }

    /**
     * 分页数据庄户按
     *
     * @param pagePo   分页信息列表
     * @param resClazz 结果集实体类型
     * @param <Po>     Po类型
     * @param <Res>    Res类型
     * @return 分页信息
     */
    public static <Po, Res extends Po> PageInfo<Res> toPageInfo(List<Po> pagePo, Class<Res> resClazz) {
        List<Res> resList = BeanUtil.copyToList(pagePo, resClazz);
        PageInfo<Res> result = new PageInfo<>(resList);
        BeanUtil.copyProperties(pagePo, result);
        return result;
    }
}
